home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / byobu-export < prev    next >
Text File  |  2009-10-11  |  6KB  |  242 lines

  1. #!/bin/sh -e
  2. #
  3. #    screen-profile-export
  4. #    Copyright (C) 2008 Canonical Ltd.
  5. #
  6. #    Authors: Dustin Kirkland <kirkland@canonical.com>
  7. #
  8. #    This program is free software: you can redistribute it and/or modify
  9. #    it under the terms of the GNU General Public License as published by
  10. #    the Free Software Foundation, version 3 of the License.
  11. #
  12. #    This program is distributed in the hope that it will be useful,
  13. #    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. #    GNU General Public License for more details.
  16. #
  17. #    You should have received a copy of the GNU General Public License
  18. #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  19.  
  20. PKG="byobu"
  21. SHARE="/usr/share/$PKG"
  22. DIR=`mktemp -t -d $PKG.XXXXXXXX` || error "Could not create a temporary directory"
  23. # Grab list of available colors
  24. colors=`find $SHARE/profiles/ -type f | sed "s/^.*\///" | sed "s/^.*-//" | sort -u | egrep -v "common|plain|NONE"`
  25.  
  26. # Make sure we clean up $DIR if we exit for any reason
  27. trap "rm -rf "$DIR" 2>/dev/null || true" EXIT HUP INT QUIT TERM
  28.  
  29. usage() {
  30.     echo
  31.     echo "Usage:"
  32.     echo " $0 [-c COLOR] -f TARGET.tar.gz"
  33.     echo
  34.     echo "If TARGET.tar.gz is unspecified, a randomly generated"
  35.     echo "filename will be used."
  36.     echo
  37.     echo "COLOR is obtained interactively if unspecified; or one of:"
  38.     for c in $colors; do
  39.         echo " * $c"
  40.     done
  41.     echo
  42.     exit 1
  43. }
  44.  
  45. error() {
  46.     echo "ERROR: $1" 1>&2
  47.     [ "$generated" = "1" -a -f "$file" ] && rm -f "$file"
  48.     exit 1
  49. }
  50.  
  51. choose() {
  52.     i=0
  53.     x=
  54.     selected=
  55.     for x in $@; do
  56.         i=$(expr $i + 1)
  57.         [ $i -lt 10 ] && i=" $i"
  58.         echo " $i. $x" 1>&2
  59.     done
  60.     echo
  61.     count=1
  62.     while /bin/true; do
  63.         if [ $count -gt 5 ]; then
  64.             error "Invalid selection"
  65.         fi
  66.         count=`expr $count + 1`
  67.         if ! test $selected -gt 0 2>/dev/null; then
  68.             echo -n "`gettext 'Choose'` [1 -$i]: "
  69.             selected=`head -n1`
  70.         elif ! test $selected -le $i 2>/dev/null; then
  71.             echo -n "`gettext 'Choose'` [1 -$i]: "
  72.             selected=`head -n1`
  73.         else
  74.             break
  75.         fi
  76.     done
  77.     i=0
  78.     for x in $@; do
  79.         i=$(expr $i + 1)
  80.         if [ "$i" = "$selected" ]; then
  81.             SELECTED="$x"
  82.             return 0
  83.         fi
  84.     done
  85.     exit 1
  86. }
  87.  
  88. hr() {
  89.     echo "###############################################################################"
  90. }
  91.  
  92. header() {
  93.     hr
  94.     echo "# This GNU Screen profile was generated by the $PKG-export"
  95.     echo "# program, which is part of the $PKG package, and contains a"
  96.     echo "# subset of the functionality available from the full package."
  97.     echo "#"
  98.     echo "# For more information, source code, questions, and bugs, see:"
  99.     echo "#  * https://launchpad.net/$PKG"
  100.     echo "#"
  101.     echo "#    Copyright (C) 2008 Canonical Ltd."
  102.     echo "#"
  103.     echo "#    Author: Dustin Kirkland <kirkland@canonical.com>"
  104.     echo "#"
  105.     echo "#    This program is free software: you can redistribute it and/or modify"
  106.     echo "#    it under the terms of the GNU General Public License as published by"
  107.     echo "#    the Free Software Foundation, version 3 of the License."
  108.     echo "#"
  109.     echo "#    This program is distributed in the hope that it will be useful,"
  110.     echo "#    but WITHOUT ANY WARRANTY; without even the implied warranty of"
  111.     echo "#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the"
  112.     echo "#    GNU General Public License for more details."
  113.     echo "#"
  114.     echo "#    You should have received a copy of the GNU General Public License"
  115.     echo "#    along with this program.  If not, see <http://www.gnu.org/licenses/>."
  116.     hr
  117. }
  118.  
  119. sources() {
  120.     # insert the common profile, replace the status exe path
  121.     echo
  122.     cat $SHARE/profiles/common | sed "s:$PKG-:\$HOME/.$PKG/$PKG-:"
  123.     hr
  124.     echo
  125.     cat $SHARE/keybindings/f-keys
  126.     hr
  127.     echo
  128.     hr
  129.     cat "$SOURCE"
  130.     hr
  131. }
  132.  
  133.  
  134. # Handle command line parameters
  135. color=
  136. file=
  137. while [ $# -gt 1 ]; do
  138.     case "$1" in
  139.         -c)
  140.             color="$2"
  141.             shift 2
  142.         ;;
  143.         -f)
  144.             file="$2"
  145.             shift 2
  146.         ;;
  147.         *)
  148.             usage
  149.         ;;
  150.     esac
  151. done
  152.  
  153. [ $# -eq 1 ] && file="$1"
  154.  
  155. if [ -z "$file" ]; then
  156.     # Generate a temp archive filename
  157.     while true; do
  158.         file=`mktemp -t $PKG.XXXXXX` || error "Could not generate random filename"
  159.         if [ ! -e "$file.tar.gz" ]; then
  160.             mv -i "$file" "$file.tar.gz"
  161.             file="$file.tar.gz"
  162.             generated=1
  163.             break
  164.         else
  165.             rm -f "$file"
  166.         fi
  167.     done
  168. else
  169.     echo "$file" | grep -qs "\.tar\.gz$" || error "Target file must be a '.tar.gz' archive"
  170.     if [ -e "$file" ]; then
  171.         echo `gettext "File exists"` " [$file]"
  172.         echo -n "`gettext 'Remove file? [y/N] '`"
  173.         remove=`head -n1`
  174.         if [ "$remove" = "Y" -o "$remove" = "y" ]; then
  175.             rm -f "$file"
  176.         else
  177.             exit 1
  178.         fi
  179.     fi
  180. fi
  181.  
  182. # Obtain selections
  183. count=1
  184. while /bin/true; do
  185.     if [ $count -gt 5 ]; then
  186.         error "Invalid selection"
  187.     fi
  188.     SOURCE="$SHARE"/profiles/"$color"
  189.     if [ -f "$SOURCE" ]; then
  190.         break
  191.     else
  192.         # Try in the misc directory too
  193.         SOURCE="$SHARE"/profiles/misc/"$color"
  194.         if [ -f "$SOURCE" ]; then
  195.             break
  196.         fi
  197.     fi
  198.     echo
  199.     echo `gettext "Select a color: "`
  200.     choose $colors
  201.     color=$SELECTED
  202.     count=`expr $count + 1`
  203. done
  204.  
  205. # Create workspace
  206. PROFILE="$DIR/.screenrc"
  207. STATUS="$DIR/.$PKG/status"
  208. mkdir -p "$DIR/.$PKG/bin"
  209. touch "$DIR/.$PKG/profile"
  210. dpkg-query --show --showformat '${Package} ${Version}\n' $PKG > "$DIR/.$PKG/version" 2>/dev/null || true
  211. echo "http://launchpad.net/$PKG" >> "$DIR/.$PKG/version"
  212.  
  213. # Copy status scripts
  214. cp -a /usr/lib/$PKG/* "$DIR/.$PKG/bin"
  215. cp -a /usr/bin/$PKG-status "$DIR/.$PKG"
  216. cp -a /usr/bin/$PKG-janitor "$DIR/.$PKG"
  217.  
  218. # Generate the monolithic profile
  219. header > "$PROFILE"
  220. sources >> "$PROFILE"
  221. cat /etc/$PKG/statusrc > "$STATUS"
  222.  
  223. # Some gardening
  224. # Drop additional "source" calls
  225. sed -i "s:^source .*::" "$PROFILE"
  226. # Use .screenrc instead
  227. sed -i "s:.$PKG/profile\":\.screenrc\":" "$PROFILE"
  228. # Drop the F9->Menu key
  229. sed -i "s:^bindkey -k k9 screen -t help:#bindkey -k k9 screen -t help:" "$PROFILE"
  230.  
  231. # tar up the results
  232. tar --owner=root --group=root -zcf "$file" -C "$DIR" . || error "Could not create archive"
  233.  
  234. echo
  235. echo "Success!"
  236. echo
  237. echo "  "`gettext "Profile"` ": [$color]"
  238. echo "  "`gettext "Archive"` ": [$file]"
  239. echo
  240. echo `gettext "Extract the archive in your home directory on the target system."`
  241. echo
  242.